package de.ihk.beans;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

import org.primefaces.model.DualListModel;


import de.ihk.data.Bearbeiter;
import de.ihk.data.Test;
import de.ihk.datamanagment.MysqlConnector;

@ManagedBean(name = "neuTestBean")
@ViewScoped
public class NeuTestBean implements Serializable {

	private static final long serialVersionUID = 1L;
	// private BearbeiterConverter converter;
	private String newTestBezeichnung;
	private String newTestSemester;
	private String newTestFachgebiet;
	private Date date;

	private List<Bearbeiter> bearbList;

	private DualListModel<Bearbeiter> dualList;;

	private ResultSet rs = null;
	private MysqlConnector conn = null;

	@ManagedProperty("#{loginBean}")
	private LoginBean login;

	public NeuTestBean() throws ClassNotFoundException, SQLException {
		System.out.println("NeuTestBean wird erstellt");
		bearbList = new ArrayList<Bearbeiter>();
		List<Bearbeiter> target = new ArrayList<Bearbeiter>();
		List<Bearbeiter> source = new ArrayList<Bearbeiter>();

		conn = new MysqlConnector();
		updateList();

		source = bearbList;
		dualList = new DualListModel<Bearbeiter>(source, target);
		System.out.println("BearbeiterTarget= " + target);

		// converter = new BearbeiterConverter(bearbList);

	}

	public void create(ActionEvent actionEvent) throws SQLException {
		// login.setBearbeiters(bearbeiters);
		rs = conn.getTests();
		int maxid = 1;
		while (rs.next()) {
			if (rs.getInt(1) > maxid) {
				maxid = rs.getInt(1);
			}
		}

		String bearbeiterString = "";

		for (Bearbeiter be : dualList.getTarget()) {

			bearbeiterString += be.getKuerzel() + ",";
		}

		String datum = date.toString();
		conn.addTestToDb(maxid + 1, newTestSemester, newTestFachgebiet, newTestBezeichnung, datum, bearbeiterString);
		System.out.println("DONE!");
		login.doRedirect("tests.xhtml");
	}

	public void updateList() throws SQLException {
		rs = conn.getBearbeiters();
		bearbList.removeAll(bearbList);
		while (rs.next()) {
			// TODO Tests zu Bearbeitern adden
			rs.getString(5);
			bearbList.add(new Bearbeiter(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), new Test[] {}));
		}
		System.out.println("Updateing: " + bearbList);
	}

	public List<Bearbeiter> getBearbList() {
		return bearbList;
	}

	public void setBearbList(List<Bearbeiter> bearbList) {
		this.bearbList = bearbList;
	}

	// ---- GETTER UND SETTER
	public String getNewTestBezeichnung() {
		return newTestBezeichnung;
	}

	public void setNewTestBezeichnung(String newTestBezeichnung) {
		this.newTestBezeichnung = newTestBezeichnung;
	}

	public String getNewTestSemester() {
		return newTestSemester;
	}

	public void setNewTestSemester(String newTestSemester) {
		this.newTestSemester = newTestSemester;
	}

	public String getNewTestFachgebiet() {
		return newTestFachgebiet;
	}

	public void setNewTestFachgebiet(String newTestFachgebiet) {
		this.newTestFachgebiet = newTestFachgebiet;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public DualListModel<Bearbeiter> getDualList() {
		return dualList;
	}

	public void setDualList(DualListModel<Bearbeiter> bearbeiterBoth) {
		this.dualList = bearbeiterBoth;
	}

	public void setLogin(LoginBean login) {
		this.login = login;
	}

}
